#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>

#define NTHREADS 1
#define AMOUNTW_THREAD 10000000

#define WORDSIZE 40
#define PHRASESIZE 1024
#define AMOUNTPH 1000000
#define BLOCKSIZE 60000

typedef struct {
    char *memory;   //buffer para guardar todo o conteudo do arquivo
    unsigned long int size;     //armazena o tamanho do arquivo
    unsigned long int positionph[AMOUNTPH];     //vetor que armazena todas as posições do arquivo em que termina uma frase
    unsigned long int amountphrases;    //armazena a qnt total de frases do arquivo
    unsigned long int phrases_thread;   //armazena a qnt de frases para cada thread
    unsigned long int rest;     //armazena o que sobrou de frases na divisao de frases para as threads
    unsigned long int count_phrase;     //controla qual eh a frase que vai ser lida
    unsigned long int count_word;       //idem
    int fd;
} FileStruct;

FileStruct *filebuffer;

short int InitializeStructFile(const char *);   //realiza  toda a estrutura de decomposicao de dados

void ReadFile();    //le o arquivo e armazena na memoria

void AlocateDataFile();     //percorre a memoria do arquivo para procurar as posicoes das frases

unsigned long int ReturnWords(char **);     //retorna uma matriz de palavras (linha eh o num da palavra, coluna eh o byte da palavra)

unsigned long int ReturnPhrases(char **, unsigned long int); //retorna uma matriz de frases (linha eh o num da frase, coluna eh o byte da frase)

unsigned long int ReturnPhrasesPerThread();     //retorna a quantidade de frases para um determinada thread

void ResetFlags();  //reinicializa contador

void FreeMemory();  //libera espaco na memoria ocupado pela estrutura FileStruct
